using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools._Configuration
{
    /// <summary>
    /// <para>Add Mainline Tree Layout</para>
    /// <para>Adds the Mainline Tree Layout algorithm to the list of layouts to be automatically chained at the end of the building of diagrams based on a given template. This tool also presets the Mainline Tree Layout algorithm parameters for any diagram based on that template.</para>
    /// <para>将主线树布局算法添加到布局列表中，以便在基于给定模板构建逻辑示意图结束时自动链接。此工具还为基于该模板的任何逻辑示意图预设主线树布局算法参数。</para>
    /// </summary>    
    [DisplayName("Add Mainline Tree Layout")]
    public class AddMainlineTreeLayout : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddMainlineTreeLayout()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// </param>
        /// <param name="_template_name">
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// </param>
        /// <param name="_is_active">
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the layout algorithm will automatically execute when generating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added layout algorithm will automatically run during the generation of any diagram that is based on the Input Diagram Template parameter. This is the default.
        ///       <para>The parameter values specified for the layout algorithm are used to run the layout during diagram generation. They are also loaded by default when the algorithm is to be run on any diagram based on the input template.    </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>Unchecked—All the parameter values currently specified for the added layout algorithm will be loaded by default when the algorithm is to be run on any diagram based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成逻辑示意图时是否自动执行布局算法。
        ///   <bulletList>
        /// <bullet_item>选中 - 添加的布局算法将在生成基于输入逻辑示意图模板参数的任何逻辑示意图期间自动运行。这是默认设置。
        ///       <para>为布局算法指定的参数值用于在逻辑示意图生成期间运行布局。默认情况下，当算法要在基于输入模板的任何逻辑示意图上运行时，也会加载它们。   </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>未选中—默认情况下，当要在基于输入模板的任何逻辑示意图上运行该算法时，将加载当前为添加的布局算法指定的所有参数值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        public AddMainlineTreeLayout(object _in_utility_network, object _template_name, _is_active_value _is_active)
        {
            this._in_utility_network = _in_utility_network;
            this._template_name = _template_name;
            this._is_active = _is_active;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Add Mainline Tree Layout";

        public override string CallName => "nd.AddMainlineTreeLayout";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _template_name, _is_active.GetGPValue(), _are_containers_preserved.GetGPValue(), _tree_direction.GetGPValue(), _branches_placement.GetGPValue(), _is_unit_absolute.GetGPValue(), _perpendicular_absolute, _perpendicular_proportional, _along_absolute, _along_proportional, _disjoined_graph_absolute, _disjoined_graph_proportional, _are_edges_orthogonal.GetGPValue(), _breakpoint_position, _out_utility_network, _out_template_name, _edge_display_type.GetGPValue(), _offset_absolute, _offset_proportional];

        /// <summary>
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _template_name { get; set; }


        /// <summary>
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the layout algorithm will automatically execute when generating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added layout algorithm will automatically run during the generation of any diagram that is based on the Input Diagram Template parameter. This is the default.
        ///       <para>The parameter values specified for the layout algorithm are used to run the layout during diagram generation. They are also loaded by default when the algorithm is to be run on any diagram based on the input template.    </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>Unchecked—All the parameter values currently specified for the added layout algorithm will be loaded by default when the algorithm is to be run on any diagram based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成逻辑示意图时是否自动执行布局算法。
        ///   <bulletList>
        /// <bullet_item>选中 - 添加的布局算法将在生成基于输入逻辑示意图模板参数的任何逻辑示意图期间自动运行。这是默认设置。
        ///       <para>为布局算法指定的参数值用于在逻辑示意图生成期间运行布局。默认情况下，当算法要在基于输入模板的任何逻辑示意图上运行时，也会加载它们。   </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>未选中—默认情况下，当要在基于输入模板的任何逻辑示意图上运行该算法时，将加载当前为添加的布局算法指定的所有参数值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Active")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _is_active_value _is_active { get; set; }

        public enum _is_active_value
        {
            /// <summary>
            /// <para>ACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ACTIVE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>INACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INACTIVE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Preserve container layout</para>
        /// <para><xdoc>
        ///   <para>Specifies how the algorithm will process containers.
        ///   <bulletList>
        ///     <bullet_item>Checked—The layout algorithm will execute on the top graph of the diagram so containers are preserved.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The layout algorithm will execute on both content and noncontent features in the diagram. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定算法将如何处理容器。
        ///   <bulletList>
        ///     <bullet_item>选中 - 布局算法将在逻辑示意图的顶部图形上执行，以便保留容器。</bullet_item><para/>
        ///     <bullet_item>未选中 - 布局算法将对逻辑示意图中的内容要素和非内容要素执行。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserve container layout")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_containers_preserved_value _are_containers_preserved { get; set; } = _are_containers_preserved_value._false;

        public enum _are_containers_preserved_value
        {
            /// <summary>
            /// <para>PRESERVE_CONTAINERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PRESERVE_CONTAINERS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_CONTAINERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_CONTAINERS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Tree Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the direction of the main line.</para>
        ///   <bulletList>
        ///     <bullet_item>From left to right—The main line will be drawn as a horizontal line starting from the left and ending on the right. This is the default.</bullet_item><para/>
        ///     <bullet_item>From right to left—The main line will be drawn as a horizontal line starting from the right and ending on the left.</bullet_item><para/>
        ///     <bullet_item>From bottom to top—The main line will be drawn as a vertical line starting from the bottom and ending at the top.</bullet_item><para/>
        ///     <bullet_item>From top to bottom—The main line will be drawn as a vertical line starting from the top and ending at the bottom.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定主线的方向。</para>
        ///   <bulletList>
        ///     <bullet_item>从左到右—主线将绘制为一条水平线，从左开始，到右侧结束。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>从右到左 - 主线将绘制为一条水平线，从右开始，到左侧结束。</bullet_item><para/>
        ///     <bullet_item>从下到上 - 主线将绘制为从底部开始到顶部结束的垂直线。</bullet_item><para/>
        ///     <bullet_item>从上到下 - 主线将绘制为从顶部开始到底部结束的垂直线。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tree Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _tree_direction_value _tree_direction { get; set; } = _tree_direction_value._FROM_LEFT_TO_RIGHT;

        public enum _tree_direction_value
        {
            /// <summary>
            /// <para>From left to right</para>
            /// <para>From left to right—The main line will be drawn as a horizontal line starting from the left and ending on the right. This is the default.</para>
            /// <para>从左到右—主线将绘制为一条水平线，从左开始，到右侧结束。这是默认设置。</para>
            /// </summary>
            [Description("From left to right")]
            [GPEnumValue("FROM_LEFT_TO_RIGHT")]
            _FROM_LEFT_TO_RIGHT,

            /// <summary>
            /// <para>From right to left</para>
            /// <para>From right to left—The main line will be drawn as a horizontal line starting from the right and ending on the left.</para>
            /// <para>从右到左 - 主线将绘制为一条水平线，从右开始，到左侧结束。</para>
            /// </summary>
            [Description("From right to left")]
            [GPEnumValue("FROM_RIGHT_TO_LEFT")]
            _FROM_RIGHT_TO_LEFT,

            /// <summary>
            /// <para>From bottom to top</para>
            /// <para>From bottom to top—The main line will be drawn as a vertical line starting from the bottom and ending at the top.</para>
            /// <para>从下到上 - 主线将绘制为从底部开始到顶部结束的垂直线。</para>
            /// </summary>
            [Description("From bottom to top")]
            [GPEnumValue("FROM_BOTTOM_TO_TOP")]
            _FROM_BOTTOM_TO_TOP,

            /// <summary>
            /// <para>From top to bottom</para>
            /// <para>From top to bottom—The main line will be drawn as a vertical line starting from the top and ending at the bottom.</para>
            /// <para>从上到下 - 主线将绘制为从顶部开始到底部结束的垂直线。</para>
            /// </summary>
            [Description("From top to bottom")]
            [GPEnumValue("FROM_TOP_TO_BOTTOM")]
            _FROM_TOP_TO_BOTTOM,

        }

        /// <summary>
        /// <para>Branches Placement</para>
        /// <para><xdoc>
        ///   <para>Specifies how branches from the main line will be relatively placed with regard to its direction.</para>
        ///   <bulletList>
        ///     <bullet_item>Both sides—Branches will be placed on both the left and right sides of the main line. This is the default.</bullet_item><para/>
        ///     <bullet_item>Left side—Branches will only be placed on the left side of the main line.</bullet_item><para/>
        ///     <bullet_item>Right side—Branches will only be placed on the right side of the main line.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定主线的分支相对于其方向的相对放置方式。</para>
        ///   <bulletList>
        ///     <bullet_item>两侧 - 分支将放置在主线的左侧和右侧。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>左侧 - 分支将仅放置在主线的左侧。</bullet_item><para/>
        ///     <bullet_item>右侧 - 分支将仅放置在主线的右侧。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Branches Placement")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _branches_placement_value _branches_placement { get; set; } = _branches_placement_value._BOTH_SIDES;

        public enum _branches_placement_value
        {
            /// <summary>
            /// <para>Both sides</para>
            /// <para>Both sides—Branches will be placed on both the left and right sides of the main line. This is the default.</para>
            /// <para>两侧 - 分支将放置在主线的左侧和右侧。这是默认设置。</para>
            /// </summary>
            [Description("Both sides")]
            [GPEnumValue("BOTH_SIDES")]
            _BOTH_SIDES,

            /// <summary>
            /// <para>Left side</para>
            /// <para>Left side—Branches will only be placed on the left side of the main line.</para>
            /// <para>左侧 - 分支将仅放置在主线的左侧。</para>
            /// </summary>
            [Description("Left side")]
            [GPEnumValue("LEFT_SIDE")]
            _LEFT_SIDE,

            /// <summary>
            /// <para>Right side</para>
            /// <para>Right side—Branches will only be placed on the right side of the main line.</para>
            /// <para>右侧 - 分支将仅放置在主线的右侧。</para>
            /// </summary>
            [Description("Right side")]
            [GPEnumValue("RIGHT_SIDE")]
            _RIGHT_SIDE,

        }

        /// <summary>
        /// <para>Spacing values interpreted as absolute units in the diagram coordinate system</para>
        /// <para><xdoc>
        ///   <para>Specifies how parameters representing distances will be interpreted.
        ///   <bulletList>
        ///     <bullet_item>Checked—The layout algorithm will interpret any distance values as linear units.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The layout algorithm will interpret any distance values as relative units to an estimation of the average of the junction sizes in the current diagram extent. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定如何解释表示距离的参数。
        ///   <bulletList>
        ///     <bullet_item>选中 - 布局算法会将任何距离值解释为线性单位。</bullet_item><para/>
        ///     <bullet_item>未选中 - 布局算法会将任何距离值解释为当前逻辑示意图范围内交汇点大小平均值估计值的相对单位。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spacing values interpreted as absolute units in the diagram coordinate system")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_unit_absolute_value _is_unit_absolute { get; set; } = _is_unit_absolute_value._false;

        public enum _is_unit_absolute_value
        {
            /// <summary>
            /// <para>ABSOLUTE_UNIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ABSOLUTE_UNIT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>PROPORTIONAL_UNIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PROPORTIONAL_UNIT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Between Junctions Perpendicular to the Direction</para>
        /// <para>The spacing between diagram junctions that are displayed along the axis perpendicular to the main line. The default is 2 in the diagram's coordinate system. This parameter can only be used with absolute units.</para>
        /// <para>沿垂直于主线的轴显示的逻辑示意图交汇点之间的间距。在关系图的坐标系中，默认值为 2。此参数只能用于绝对单位。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Junctions Perpendicular to the Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _perpendicular_absolute { get; set; } = "2 Unknown";


        /// <summary>
        /// <para>Between Junctions Perpendicular to the Direction</para>
        /// <para>The spacing between diagram junctions that are displayed along the axis perpendicular to the main line. The default is 2. This parameter can only be used with proportional units.</para>
        /// <para>沿垂直于主线的轴显示的逻辑示意图交汇点之间的间距。默认值为 2。此参数只能与比例单位一起使用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Junctions Perpendicular to the Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _perpendicular_proportional { get; set; } = 2;


        /// <summary>
        /// <para>Between Junctions Along the Direction</para>
        /// <para>The spacing between diagram junctions that are displayed along the main line, as well as the spacing between diagram junctions that are displayed along the axis parallel to the main line. This parameter can only be used with absolute units. The default is 2 in the units of the diagram's coordinate system.</para>
        /// <para>沿主线显示的逻辑示意图交汇点之间的间距，以及沿平行于主线的轴显示的逻辑示意图交汇点之间的间距。此参数只能用于绝对单位。默认值为 2，以逻辑示意图坐标系为单位。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Junctions Along the Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _along_absolute { get; set; } = "2 Unknown";


        /// <summary>
        /// <para>Between Junctions Along the Direction</para>
        /// <para>The spacing between diagram junctions that are displayed along the main line, as well as the spacing between diagram junctions that are displayed along the axis parallel to the main line. This parameter is used with proportional units. The default is 2.</para>
        /// <para>沿主线显示的逻辑示意图交汇点之间的间距，以及沿平行于主线的轴显示的逻辑示意图交汇点之间的间距。此参数用于比例单位。默认值为 2。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Junctions Along the Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _along_proportional { get; set; } = 2;


        /// <summary>
        /// <para>Between Disjoined Graphs</para>
        /// <para>The minimum spacing that will separate features belonging to disjoined graphs when the diagram contains such graphs. This parameter is used with absolute units. The default is 4 in the units of the diagram's coordinate system.</para>
        /// <para>当逻辑示意图包含属于分离图形的要素时，分隔属于分离图形的要素的最小间距。此参数用于绝对单位。默认值为逻辑示意图坐标系单位的 4。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Disjoined Graphs")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _disjoined_graph_absolute { get; set; } = "4 Unknown";


        /// <summary>
        /// <para>Between Disjoined Graphs</para>
        /// <para>The minimum spacing that will separate features belonging to disjoined graphs when the diagram contains such graphs. This parameter is used with proportional units. The default is 4.</para>
        /// <para>当逻辑示意图包含属于分离图形的要素时，分隔属于分离图形的要素的最小间距。此参数用于比例单位。默认值为 4。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Disjoined Graphs")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _disjoined_graph_proportional { get; set; } = 4;


        /// <summary>
        /// <para>Orthogonally display edges</para>
        /// <para><xdoc>
        ///   <para>Specifies how diagram edges that are related to the tree branches will display.
        ///   <para>This parameter is deprecated at ArcGIS Pro 2.8. It is systematically ignored regardless of its value when the edge_display_type parameter is specified. However, to maintain compatibility with ArcGIS Pro 2.1, it remains enabled when the edge_display_type parameter is not specified.</para>
        ///   </para>
        ///   <bulletList>
        ///     <bullet_item>ORTHOGONAL_EDGES—All diagram edges related to the tree branches will display with right angles.</bullet_item><para/>
        ///     <bullet_item>SLANTED_EDGES—All diagram edges related to the tree branches will not display with right angles. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定与树枝相关的逻辑示意图边的显示方式。
        ///   <para>此参数在 ArcGIS Pro 2.8 中已弃用。指定 edge_display_type 参数时，无论其值如何，都会系统地忽略它。但是，为了保持与 ArcGIS Pro 2.1 的兼容性，在未指定 edge_display_type 参数时，它仍保持启用状态。</para>
        ///   </para>
        ///   <bulletList>
        ///     <bullet_item>ORTHOGONAL_EDGES - 与树枝相关的所有逻辑示意图边都将以直角显示。</bullet_item><para/>
        ///     <bullet_item>SLANTED_EDGES - 与树枝相关的所有逻辑示意图边都不会以直角显示。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Orthogonally display edges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_edges_orthogonal_value _are_edges_orthogonal { get; set; } = _are_edges_orthogonal_value._false;

        public enum _are_edges_orthogonal_value
        {
            /// <summary>
            /// <para>ORTHOGONAL_EDGES</para>
            /// <para>ORTHOGONAL_EDGES—All diagram edges related to the tree branches will display with right angles.</para>
            /// <para>ORTHOGONAL_EDGES - 与树枝相关的所有逻辑示意图边都将以直角显示。</para>
            /// </summary>
            [Description("ORTHOGONAL_EDGES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>SLANTED_EDGES</para>
            /// <para>SLANTED_EDGES—All diagram edges related to the tree branches will not display with right angles. This is the default.</para>
            /// <para>SLANTED_EDGES - 与树枝相关的所有逻辑示意图边都不会以直角显示。这是默认设置。</para>
            /// </summary>
            [Description("SLANTED_EDGES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Break Point Relative Position (%)</para>
        /// <para><xdoc>
        ///   <para>The relative position of the break point that will be inserted along the diagram edges when Edge Display Type is Regular edges (edge_display_type = "REGULAR_EDGES" in Python) or Edge Display Type is Orthogonal edges (edge_display_type = "ORTHOGONAL_EDGES" in Python). It is a percentage between 0 and 100.
        ///   <bulletList>
        ///     <bullet_item>With a Break Point Relative Position (%) value of 0, the break point is positioned at the x-coordinate of the edge's from junction and at the y-coordinate of the edge's to junction for a horizontal tree. It is positioned at the y-coordinate of the edge's from junction and at the x-coordinate of the edge's to junction for a vertical tree.  </bullet_item><para/>
        ///     <bullet_item>With a Break Point Relative Position (%) value of 100, there is no break point inserted on the diagram edges; each diagram edge directly connects its from and to junctions.  </bullet_item><para/>
        ///     <bullet_item>With a Break Point Relative Position (%) value of N between 0 and 100, the break point is positioned at N% of the length of the [XY] segment, X being the x-coordinate of the edge's from junction and Y being the y-coordinate of the edge's to junction for a horizontal tree. It is positioned at N% of the length of the [YX] segment, Y being the y-coordinate of the edge's from junction and X being the x-coordinate of the edge's to junction for a vertical tree.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>The relative position of the two inflection points that will be inserted along the diagram edges to compute the curved edges geometry when Edge Display Type is Curved edges (edge_display_type = "CURVED_EDGES" in Python). It is a percentage between 15 and 40. With a Break Point Relative Position (%) value of N between 15 and 40:
        ///   <bulletList>
        ///     <bullet_item>X being the x-coordinate of the edge's from junction and Y being the y-coordinate of the edge's to junction for a horizontal tree:
        ///       <bulletList>
        ///         <bullet_item>The first inflection point will be positioned at N% of the length of the [XY] segment.      </bullet_item><para/>
        ///         <bullet_item>The second inflection point will be positioned at (100 - N)% of the length of the [XY] segment.      </bullet_item><para/>
        ///       </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>Y being the y-coordinate of the edge's from junction and X being the x-coordinate of the edge's to junction for a vertical tree:
        ///       <bulletList>
        ///         <bullet_item>The first inflection point will be positioned at N% of the length of the [YX] segment.      </bullet_item><para/>
        ///         <bullet_item>The second inflection point will be positioned at (100 - N)% of the length of the [XY] segment.      </bullet_item><para/>
        ///       </bulletList>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>The concept of the from and to junctions above is relative to the tree direction; it has nothing to do with the real topology of the edge feature or edge object in the network.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>当“边显示类型”为“常规边”（Python 中的edge_display_type = “REGULAR_EDGES”）或“边显示类型”为正交边（Python 中为 edge_display_type = “ORTHOGONAL_EDGES”）时，将沿逻辑示意图边插入的断点的相对位置。它是介于 0 和 100 之间的百分比。
        ///   <bulletList>
        ///     <bullet_item>当断点相对位置 （%） 值为 0 时，断点位于水平树的边的 from 交汇点的 x 坐标和边的 to 交汇点的 y 坐标处。它位于垂直树的边的 from 交汇点的 y 坐标和边的 to 交汇点的 x 坐标处。 </bullet_item><para/>
        ///     <bullet_item>当断点相对位置 （%） 值为 100 时，逻辑示意图边缘上没有插入断点;每个逻辑示意图边直接连接其 from 和 to 交汇点。 </bullet_item><para/>
        ///     <bullet_item>当断点相对位置 （%） 值介于 0 和 100 之间时，断点位于 [XY] 段长度的 N%，X 是边的 x 坐标，Y 是边的 x 坐标 对于水平树。它位于 [YX] 线段长度的 N%，Y 是边的 from 交汇点的 y 坐标，X 是垂直树的边到交汇点的 x 坐标。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>当“边显示类型”为“弯曲边”时，将沿逻辑示意图边插入以计算弯曲边几何的两个拐点的相对位置（Python 中的edge_display_type = “CURVED_EDGES”）。这是一个介于 15 到 40 之间的百分比。断点相对位置 （%） 值介于 15 和 40 之间时为 N：
        ///   <bulletList>
        /// <bullet_item>X 是边的 from 交汇点的 x 坐标，Y 是水平树的边到交汇点的 y 坐标：
        ///       <bulletList>
        ///         <bullet_item>第一个拐点将位于 [XY] 线段长度的 N%。</bullet_item><para/>
        ///         <bullet_item>第二个拐点将位于 [XY] 段长度的 （100 - N）%。</bullet_item><para/>
        ///       </bulletList>
        ///     </bullet_item><para/>
        /// <bullet_item>Y 是边的 from 交汇点的 y 坐标，X 是垂直树的边到交汇点的 x 坐标：
        ///       <bulletList>
        ///         <bullet_item>第一个拐点将位于 [YX] 段长度的 N%。</bullet_item><para/>
        ///         <bullet_item>第二个拐点将位于 [XY] 段长度的 （100 - N）%。</bullet_item><para/>
        ///       </bulletList>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>上面的 from 和 to 交汇点的概念是相对于树方向的;它与网络中边缘要素或边缘对象的实际拓扑无关。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Break Point Relative Position (%)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _breakpoint_position { get; set; } = 30;


        /// <summary>
        /// <para>Output Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        /// <summary>
        /// <para>Output Diagram Template</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_template_name { get; set; }


        /// <summary>
        /// <para>Edge Display Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of display for the diagram edges related to the tree branches.</para>
        ///   <bulletList>
        ///     <bullet_item>Regular edges—All diagram edges related to the tree branches will not display with right angles. This is the default.</bullet_item><para/>
        ///     <bullet_item>Orthogonal edges—All diagram edges related to the tree branches will display with right angles.</bullet_item><para/>
        ///     <bullet_item>Curved edges—All diagram edges related to the tree branches will be curved.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定与树分支相关的逻辑示意图边的显示类型。</para>
        ///   <bulletList>
        ///     <bullet_item>常规边 - 与树枝相关的所有逻辑示意图边都不会以直角显示。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>正交边—与树枝相关的所有逻辑示意图边都将以直角显示。</bullet_item><para/>
        ///     <bullet_item>弯曲边—与树枝相关的所有逻辑示意图边都将是弯曲的。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Edge Display Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _edge_display_type_value _edge_display_type { get; set; } = _edge_display_type_value._REGULAR_EDGES;

        public enum _edge_display_type_value
        {
            /// <summary>
            /// <para>Regular edges</para>
            /// <para>Regular edges—All diagram edges related to the tree branches will not display with right angles. This is the default.</para>
            /// <para>常规边 - 与树枝相关的所有逻辑示意图边都不会以直角显示。这是默认设置。</para>
            /// </summary>
            [Description("Regular edges")]
            [GPEnumValue("REGULAR_EDGES")]
            _REGULAR_EDGES,

            /// <summary>
            /// <para>Orthogonal edges</para>
            /// <para>Orthogonal edges—All diagram edges related to the tree branches will display with right angles.</para>
            /// <para>正交边—与树枝相关的所有逻辑示意图边都将以直角显示。</para>
            /// </summary>
            [Description("Orthogonal edges")]
            [GPEnumValue("ORTHOGONAL_EDGES")]
            _ORTHOGONAL_EDGES,

            /// <summary>
            /// <para>Curved edges</para>
            /// <para>Curved edges—All diagram edges related to the tree branches will be curved.</para>
            /// <para>弯曲边—与树枝相关的所有逻辑示意图边都将是弯曲的。</para>
            /// </summary>
            [Description("Curved edges")]
            [GPEnumValue("CURVED_EDGES")]
            _CURVED_EDGES,

        }

        /// <summary>
        /// <para>Absolute Offset</para>
        /// <para>The offset used to separate overlapping segments when using absolute units and Edge Display Type is Orthogonal edges. The value cannot exceed 10 percent of the smallest value specified for the other spacing parameters. The default is 0.</para>
        /// <para>使用绝对单位和边显示类型时，用于分隔重叠线段的偏移量为正交边。该值不能超过为其他间距参数指定的最小值的 10%。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Absolute Offset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _offset_absolute { get; set; } = "0 Unknown";


        /// <summary>
        /// <para>Proportional Offset</para>
        /// <para>The offset used to separate overlapping segments when using proportional units and Edge Display Type is Orthogonal edges. It is a double value that cannot exceed 10 percent of the smallest value specified for the other spacing parameters. The default is 0.</para>
        /// <para>使用比例单位和边显示类型时，用于分隔重叠线段的偏移量为正交边。它是一个双精度值，不能超过为其他间距参数指定的最小值的 10%。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Proportional Offset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _offset_proportional { get; set; } = 0;


        public AddMainlineTreeLayout SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}